#

| Chapter 43 Printing |

## 43.10 Filename Headers Above Files Without pr

The pr command (43.7) displays your files with a nice header above them. But it can also add a bunch of blank lines to fill a page and break the file to add more headers in the middle if the file is longer than a page. This article shows alternatives to pr that print a single header followed by the entire file, with no extra blank lines or page breaks.

1. When you redirect the output of more (25.3) (or pg) somewhere besides a terminal, it doesn't stop at the end of a screenful. It prints a little header above each file and outputs all the files at once. Instead of redirecting the output to a file, you could pipe it to another program - like your print spooler:

       cat
       % more file* > package
       % cat package
       ::::::::::::::
       file1
       ::::::::::::::
       ...contents of file1....
       ::::::::::::::
       file2
       ::::::::::::::
       ...contents of file2....
       ...

   Another way to get similar headers is a feature of head (25.20): when you give multiple filenames, it adds a header above each. To be sure head gives you all of your file (not just the head), use a line count bigger than any of your files, with a command like `head -10000`.

2. Bourne shell for loops with redirected output (45.22) let you combine a bunch of commands and grab the output of all of them at once. Here's a loop that runs ls -l on each file. It uses awk (33.11) to print just the file's permissions (field 1), last modification date (fields 6-8), and name (field 9, not including any name from a symbolic link). (You could pipe use more awk formatting to make a fancier heading - and get rid of the echo commands, too.) The output is redirected to a file named printme; as already stated, a pipe to your printer program will also work.

   >     $ for f in file*
   >     > do
   >     > echo =====================================
   >     > ls -l $f | awk '{print $1, $6, $7, $8, $9}'
   >     > echo =====================================
   >     > cat $f
   >     > done > printme
   >     $ cat printme
   >     =============================================
   >     -rw-r----- Oct 28 07:28 file1
   >     =============================================
   >     ...contents of file1....
   >     =============================================
   >     -r--r--r-- Nov  3 09:35 file2
   >     =============================================
   >     ...contents of file2....
   >     ...

If you use those last two tricks a lot, you might put them into an alias, function, or shell script (10.1).

- JP

43.9 Indenting Text for Printing |  | 43.11 Big Letters: banner